package com.yeyks.commonReference.service.other;

import com.yeyks.account.dal.domain.AccountInfo;
import com.yeyks.common.appcommon.dto.platform.AppCouponBasicDTO;
import com.yeyks.common.appcommon.dto.platform.AppCouponInfoDTO;
import com.yeyks.common.appcommon.param.platform.GetCouponDetailParam;
import com.yeyks.common.appcommon.param.platform.QueryCouponParam;
import com.yeyks.common.appcommon.result.CommonPage;
import com.yeyks.common.appcommon.result.CommonResult;
import com.yeyks.other.dal.domain.CouponInfo;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;


/**
 * <p>
 * 券表 服务类
 * </p>
 *
 * @author yun
 * @since 2019-06-25
 */
public interface CouponInfoService extends IService<CouponInfo> {

    List<Map<String, Object>> statCouponUsed();


    /**
     * 通过券id获取券信息
     *
     * @param couponId
     * @return
     */
    CouponInfo selectCouponInfo(Integer couponId);

    /**
     * 通过券id和用户id查询有效的券
     *
     * @param id
     * @param used     是否被使用
     * @param valid    是否有效
     * @param couponId 券id
     * @return
     */
    List<Map> selectByUser(Integer id, Boolean used, Boolean valid, Integer couponId);

    /**
     * 获取充值10元得到的50元的券
     *
     * @param payAmount
     * @return
     */
    CouponInfo selectCouponByPayAmount(Integer payAmount);

    /**
     * 通过优惠券id获取优惠券
     *
     * @param couponId
     * @return
     */
    CouponInfo selectByCouponId(Integer couponId);

    /**
     * 是否有推广所用的优惠券
     *
     * @return
     */
    Boolean recommendExist(Integer type);

    /**
     * admin - app 分页查询优惠券
     *
     * @param param   查询输入参数
     * @param convert 操作人
     * @return 返回结果
     */
    CommonResult<CommonPage<AppCouponBasicDTO>> selectPageByParam(QueryCouponParam param, AccountInfo convert);

    /**
     * admin - app 获取优惠券详情接口
     *
     * @param getCouponDetailParam 查询输入参数
     * @param convert              操作人
     * @return 返回结果
     */
    CommonResult<AppCouponInfoDTO> getCouponDetail(GetCouponDetailParam getCouponDetailParam, AccountInfo convert);

}
